Direct Memory Access (DMA) is a technique for transferring data from one memory segment to another memory segment without passing the data through a central processing unit. Computers that have DMA enabled channels can transfer data to and from devices much more quickly that computers that use more traditional Internet Protocol channels.
DMA technology has increasingly been incorporated into different high-speed transfer protocols and architectures. Examples of architectures that use DMA as a feature include VIRTUAL INTERFACE, and INFINIBAND. The DMA feature in such systems enables data in a memory on one device to specifically be targeted for memory on another external location, such as on another node or computer system. To gain full advantage of DMA, systems that incorporate DMA features generally do so with fast network connect devices.
DMA data transfers remove data bit overhead that is characteristic of the Transmission Control Protocol/Internet Protocol (TCP/IP) data transfers. TCP/IP protocol transfers use byte streams that are segmented, where each segment includes header information and other characteristics to enable that particular data segment to reach its intended target. In contrast, DMA transfers data in a memory segment without segmenting the data into individually deliverable bytes. While DMA provides a favorable contrast to TCP/IP, techniques also exist to use DMA with TCP/IP. One such technique is referred to as Remote DMA (RDMA) over TCP/IP.
Using DMA, a first machine may employ a first memory segment, or buffer, to send data to and receive data from a second buffer on a second machine. After the first buffer receives data from the second machine, the first machine reads the data from the first buffer. In response to reading the data from the first buffer, the first machine sends an acknowledgement to the second machine. This acknowledgement indicates to the second machine that the first machine has “consumed” the data in the first buffer, and therefore additional data can be sent from the second machine to the first buffer without fear of overwriting any data therein.
Unfortunately, sending acknowledgements to other machines requires time and resources of the sending machine. Additionally, it also requires time and resources for the recipient of the acknowledgements to process the acknowledgements. Thus, it is undesirably to send an acknowledgement message to another machine each time that a buffer is read. However, according to the current state of the art, these inefficiencies must be tolerated in order to prevent overwriting unconsumed data in a direct memory access buffer.